程序中断方式


[TOC]

1.中断引入

中断传送方式的思想是:CPU在程序中安排好在某一刻启动某一台外部设备,然后CPU继续执行原来的程序,一旦外部设备完成数据传送的准备工作,便主动向CPU发出一个中断请求,请求CPU为自己服务。在可以相应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为中断请求者服务,在中断服务程序中完成一次主机于外部设备之间的数据传送。传送完成后,CPU返回原来的程序,从断点处继续执行

2.中断请求和判优

  1. 中断请求的提出

    由于每个中断源向CPU发出中断请求的时间是随机的,为了记录中断事件并区分不同的中断源,采用具有存储功能的触发器来记录中断源,称为中断请求触发器

    多个中断请求触发器构成一个中断请求寄存器,中断请求寄存器的内容称为中断字或中断码,中断字为1表示对应的中断源有中断请求

  2. 中断请求的传送

    1. 独立请求线:每个中断源单独设置中断请求线将信号送往CPU

      1. 优点:CPU在节到中断请求的同时也就知道了中断源是谁,其中断服务程序的入口地址在哪里。有利于实现向量中断,提高中断的响应速度。
      2. 缺点:硬件代价较大,且CPU所能连接的请求线数目有限,难以扩充
    2. 公共请求线:多个中断源共有一条中断请求线

      1. 优点:中断源的数目可随意扩充
      2. 缺点:CPU接到中断请求后,必须通过软件或硬件方法识别中断源,然后再找出终端服务程序的入口地址
    3. 二维结构:同一优先级采用一根公共的请求先,不同请求线上的中断优先级不同

3.中断响应与处理

3.1响应条件

  1. CPU接收到中断请求信号
  2. CPU允许中断
  3. 一条指令执行完毕:一般情况下,CPU会在一条指令执行完毕,且没有更急迫的任务时才能响应中断请求

3.2中断隐指令

什么是中断隐指令:CPU响应中断之后,会经过某些操作,转去执行中断服务程序,这些操作是由硬件直接实现的,称为中断隐指令 中断隐指令完成哪些操作: 1. 保存断点:为了保证在中断服务程序执行完毕后能正确返回原来的程序,必须将原来程序的断点(程序计数器的内容)保存起来 2. 暂不允许中断:为了使在用软件保护中断现场时,不被新的中断被打断 3. 引出终端服务程序:实质就是取出中断服务程序的入口地址,送到程序计数器PC ## 3.3中断周期 1. 关中断 2. 修改栈指针 3. 断点进栈 4. 中断服务程序入口地址存入PC 5. 执行中断服务程序 # 4.允许禁止中断 允许中断和禁止中断是用CPU中的中断允许触发器控制 允许中断即是开中断,下列情况应开中断: > 1. 已响应中断请求转向中断服务程序,在保护完中断现场后,当中断允许触发器被置位有效位 > 2. 在中断服务程序执行完毕,将返回被中断程序之前,为能再次响应中断请求做准备 禁止中断即关中断,有下列情况应关中断: > 1. 当响应某一级中断请求,不再允许被其他中断请求打断时 > 2. 在中断服务程序的保护和恢复现场之前,使处理现场工作不至于被打断 # 5.中断屏蔽 中断源发出中断请求后,这个中断请求不一定能真的送到CPU中,在有些情况下,可以用程序方式有选择的封锁部分中断,这就是中断屏蔽 > 如果给每个中断源相应地配备一个中断屏蔽触发器,则每个中断请求信号在送往判优前还要受中断屏蔽触发器的控制,各中断屏蔽触发器组成一个中断屏蔽寄存器,其内容称为屏蔽字或屏蔽码,由程序来设置 具体来说,用程序设置的方法将中断屏蔽寄存器中的某一位置1,则对应的中断请求被封锁,无法参加排队判优;只有中断屏蔽寄存器中的某一位置为0,才允许中断请求送往CPU

6.中断升级

将原本级别较低的中断源变成较高的级别,称为中断升级

中断响应次序:由硬件排队电路决定,无法改变。

中断处理次序:可以由屏蔽码来改变

一般来说,屏蔽字中1越多,其优先级越高,屏蔽字按行看

7.程序中断处理过程

  1. 关中断:让CPU进入不可再次响应中断的过程
  2. 保存断点:将当前程序计数器中的内容保存起来
  3. 识别中断源,转向中断服务程序:在多个中断源同时请求中断的情况下,响应优先级最高的那个
  4. 保存现场,交换屏蔽字:
  5. 开中断:允许更高级的中断请求得到响应,实现中断嵌套
  6. 执行中断服务程序主体
  7. 关中断:为了在恢复现场和屏蔽字时不被中断打断
  8. 恢复现场和屏蔽字
  9. 开中断
  10. 中断返回